package StudentSystem;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;

/**
 * 维护表格模型
 * 实现向JTable表格中添加新数据行，修改表格中某一单元格的值，
 * 以及从表格中删除指定的数据行
 */
public class CourseFrame extends JFrame{
	private JTextField aTextField;
	private JTextField bTextField;
	private JTextField cTextField;
	private JTextField dTextField;
	int selectedRow;
	
	public static void main(String[] args) {
		new CourseFrame().setVisible(true);
	}
	
	/**
	 * 构造方法
	 */
	public CourseFrame(){
		this.setTitle("课程信息查询");
		this.setVisible(true);
		//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(800, 550);
		//JFrame窗体居中
		this.setLocationRelativeTo(null);
		
		//创建JScrollPane（滚动面板）
		final JScrollPane scrollPane = new JScrollPane();
		this.getContentPane().add(scrollPane, BorderLayout.CENTER);
		//设置JTable中的列名
		Vector<String> columnNames = new Vector<>();
		columnNames.add("序号");
		columnNames.add("课程编号");
		columnNames.add("课程名");
		columnNames.add("课程备注");
		//设置JTable的表格数据
		Vector<Vector<String>> tableValues = new Vector<>();
		for(int row=1; row<2; row++){
			Vector<String> rowV = new Vector<>();
			rowV.add("1");
			rowV.add("001");
			rowV.add("JAVA高级");
			rowV.add("王超老师");
			tableValues.add(rowV);
		}
		//创建JTable （表格）
		JTable table = new JTable();
		//创建表格模型
		DefaultTableModel defaultTableModel = new DefaultTableModel(tableValues, columnNames);
		//设置JTable的表格模型
		table.setModel(defaultTableModel);
		/*
		 * 将JTable添加到JScrollPane中，
		 * */
		
		scrollPane.setViewportView(table);
		
		final JPanel panel = new JPanel();
		panel.setBackground(Color.green);
		this.getContentPane().add(panel, BorderLayout.SOUTH);
		panel.add(new JLabel("序号: "));
		aTextField = new JTextField("", 6);
		panel.add(aTextField);
		panel.add(new JLabel("课程编号: "));
		bTextField = new JTextField("", 6);
		panel.add(bTextField);
		panel.add(new JLabel("课程名: "));
		cTextField = new JTextField("", 6);
		panel.add(cTextField);
		panel.add(new JLabel("课程备注: "));
		dTextField = new JTextField("", 6);
		panel.add(dTextField);
		
		JButton insertButton = new JButton("添加");
		JButton deleteButton = new JButton("删除");
		JButton updateButton = new JButton("修改");
		panel.add(insertButton);
		panel.add(deleteButton);
		panel.add(updateButton);
		
		//设置表格的选择模式---为单选模式
		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		
		
		/**
		 * 点击JScrollPane滚动面板，取消选中的行
		 */
		scrollPane.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				//取消掉选中行，但是选中行的索引值还是在的，没有取消掉
				table.clearSelection();
				//显示选中行的索引值。
				System.out.println("-----------------"+selectedRow);
				
				
				//设置JTextField的默认值
				aTextField.setText("");
				bTextField.setText("");
				cTextField.setText("");
				dTextField.setText("");
			}
		});
		
		
		/**
		 * 将选中的JTable行的的信息传递给--aTestField、bTextField、cTextField
		 */
		table.addMouseListener(new MouseAdapter() {

			@Override
			public void mouseClicked(MouseEvent e) {
				//获取到JTable中选定行的---索引值
				selectedRow = table.getSelectedRow();
				//获取到指定单元格的值
				Object oa = defaultTableModel.getValueAt(selectedRow, 0);
				Object ob = defaultTableModel.getValueAt(selectedRow, 1);
				Object oc = defaultTableModel.getValueAt(selectedRow, 2);
				Object od = defaultTableModel.getValueAt(selectedRow, 3);
				//将获取去到的DefaultTableModel中指定单元格的值，传递给JTextField
				aTextField.setText(oa.toString());
				bTextField.setText(ob.toString());
				cTextField.setText(oc.toString());
				dTextField.setText(od.toString());
			}
		});
		
		
		/**
		 * 删除
		 */
		insertButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				//设置要添加到DefaultTableModel中的---行数据内容
				String[] rowValues = {aTextField.getText(), 
							bTextField.getText(), cTextField.getText(),dTextField.getText()};
				//在DefaultTableModel---添加行
				defaultTableModel.addRow(rowValues);
				
				//设置JTextField的默认值
				aTextField.setText("");
				bTextField.setText("");
				cTextField.setText("");
				dTextField.setText("");
			}
		});
		
		
		/**
		 * 添加
		 */
		deleteButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				//获取到JTable中选定行的---索引值
				selectedRow = table.getSelectedRow();
				//JTable中行的索引值是从0,1,2.3...开始的，
				//只有选中行时，才能修改内容
				if(selectedRow != -1){
					//删除DefaultTableModel中---指定索引值得行
					defaultTableModel.removeRow(selectedRow);
				}
			}
		});
		
		
		/**
		 * 修改
		 */
		updateButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				//获取到JTable中选定行的---索引值
				selectedRow = table.getSelectedRow();
				//JTable中行的索引值是从0,1,2.3...开始的，
				//只有选中行时，才能修改内容
				if(selectedRow != -1){
					//通过获取到JTextField的中的值，来修改指定单元格的内容
					defaultTableModel.setValueAt(aTextField.getText(), selectedRow, 0);
					defaultTableModel.setValueAt(bTextField.getText(), selectedRow, 1);
					defaultTableModel.setValueAt(cTextField.getText(), selectedRow, 2);
					defaultTableModel.setValueAt(dTextField.getText(), selectedRow, 3);
				}
			}
		});
		
	}
	
}